package com.ywj.volatilePrac;

import org.openjdk.jcstress.annotations.*;
import org.openjdk.jcstress.infra.results.II_Result;

//为什么使用此工具，直接运行代码不行吗？  只有使用大量的线程去执行，才能测试出指令重排序的效果
@JCStressTest     //用并发压缩工具jcstress 测试类方法
@Outcome(id = {"0, 0", "1, 1", "0, 1"}, expect = Expect.ACCEPTABLE, desc = "ok")    //@Outcome 对输出结果进行处理， "0, 0", "1, 1", "0, 1" 打印ok
@Outcome(id = "1, 0", expect = Expect.ACCEPTABLE_INTERESTING, desc = "danger")
@State
public class TestOrdering {
    volatile int x;
    int y;

    @Actor  //注解@Actor保证方法内的代码在同一个线程下执行
    public void actor1() {   //写
        x = 1;
        y = 1;
    }

    @Actor
    public void actor2(II_Result r) {   //读
        r.r1 = y;
        r.r2 = x;
    }


}
